# SPDX-FileCopyrightText: 2011 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later

add_subdirectory(realtime_compositor)

if(WITH_COMPOSITOR_CPU)
  set(INC
    .
    intern
    nodes
    operations
    realtime_compositor
    ../blenkernel
    ../blentranslation
    ../imbuf
    ../makesrna
    ../nodes
    ../windowmanager
    ../nodes/composite
    ../nodes/intern
    ../render
    ../render/intern
    ../../../extern/clew/include

    # RNA_prototypes.h
    ${CMAKE_BINARY_DIR}/source/blender/makesrna
  )

  set(INC_SYS

  )

  set(SRC
    COM_compositor.hh
    COM_defines.h

    intern/COM_BufferArea.h
    intern/COM_BufferOperation.cc
    intern/COM_BufferOperation.h
    intern/COM_BufferRange.h
    intern/COM_BuffersIterator.h
    intern/COM_CPUDevice.cc
    intern/COM_CPUDevice.h
    intern/COM_ChunkOrder.cc
    intern/COM_ChunkOrder.h
    intern/COM_ChunkOrderHotspot.cc
    intern/COM_ChunkOrderHotspot.h
    intern/COM_CompositorContext.cc
    intern/COM_CompositorContext.h
    intern/COM_ConstantFolder.cc
    intern/COM_ConstantFolder.h
    intern/COM_Converter.cc
    intern/COM_Converter.h
    intern/COM_Debug.cc
    intern/COM_Debug.h
    intern/COM_Device.cc
    intern/COM_Device.h
    intern/COM_Enums.cc
    intern/COM_Enums.h
    intern/COM_ExecutionGroup.cc
    intern/COM_ExecutionGroup.h
    intern/COM_ExecutionModel.cc
    intern/COM_ExecutionModel.h
    intern/COM_ExecutionSystem.cc
    intern/COM_ExecutionSystem.h
    intern/COM_FullFrameExecutionModel.cc
    intern/COM_FullFrameExecutionModel.h
    intern/COM_MemoryBuffer.cc
    intern/COM_MemoryBuffer.h
    intern/COM_MemoryProxy.cc
    intern/COM_MemoryProxy.h
    intern/COM_MetaData.cc
    intern/COM_MetaData.h
    intern/COM_MultiThreadedOperation.cc
    intern/COM_MultiThreadedOperation.h
    intern/COM_MultiThreadedRowOperation.cc
    intern/COM_MultiThreadedRowOperation.h
    intern/COM_Node.cc
    intern/COM_Node.h
    intern/COM_NodeConverter.cc
    intern/COM_NodeConverter.h
    intern/COM_NodeGraph.cc
    intern/COM_NodeGraph.h
    intern/COM_NodeOperation.cc
    intern/COM_NodeOperation.h
    intern/COM_NodeOperationBuilder.cc
    intern/COM_NodeOperationBuilder.h
    intern/COM_OpenCLDevice.cc
    intern/COM_OpenCLDevice.h
    intern/COM_SharedOperationBuffers.cc
    intern/COM_SharedOperationBuffers.h
    intern/COM_SingleThreadedOperation.cc
    intern/COM_SingleThreadedOperation.h
    intern/COM_TiledExecutionModel.cc
    intern/COM_TiledExecutionModel.h
    intern/COM_WorkPackage.cc
    intern/COM_WorkPackage.h
    intern/COM_WorkScheduler.cc
    intern/COM_WorkScheduler.h
    intern/COM_compositor.cc

    operations/COM_QualityStepHelper.cc
    operations/COM_QualityStepHelper.h

    # Internal nodes
    nodes/COM_SocketProxyNode.cc
    nodes/COM_SocketProxyNode.h

    # input nodes
    nodes/COM_BokehImageNode.cc
    nodes/COM_BokehImageNode.h
    nodes/COM_ColorNode.cc
    nodes/COM_ColorNode.h
    nodes/COM_ImageNode.cc
    nodes/COM_ImageNode.h
    nodes/COM_MaskNode.cc
    nodes/COM_MaskNode.h
    nodes/COM_MovieClipNode.cc
    nodes/COM_MovieClipNode.h
    nodes/COM_RenderLayersNode.cc
    nodes/COM_RenderLayersNode.h
    nodes/COM_SceneTimeNode.cc
    nodes/COM_SceneTimeNode.h
    nodes/COM_SplitNode.cc
    nodes/COM_SplitNode.h
    nodes/COM_SwitchNode.cc
    nodes/COM_SwitchNode.h
    nodes/COM_SwitchViewNode.cc
    nodes/COM_SwitchViewNode.h
    nodes/COM_TextureNode.cc
    nodes/COM_TextureNode.h
    nodes/COM_TimeNode.cc
    nodes/COM_TimeNode.h
    nodes/COM_ValueNode.cc
    nodes/COM_ValueNode.h

    # output nodes
    nodes/COM_CompositorNode.cc
    nodes/COM_CompositorNode.h
    nodes/COM_FileOutputNode.cc
    nodes/COM_FileOutputNode.h
    nodes/COM_ViewLevelsNode.cc
    nodes/COM_ViewLevelsNode.h
    nodes/COM_ViewerNode.cc
    nodes/COM_ViewerNode.h
    operations/COM_CalculateMeanOperation.cc
    operations/COM_CalculateMeanOperation.h
    operations/COM_CalculateStandardDeviationOperation.cc
    operations/COM_CalculateStandardDeviationOperation.h

    # distort nodes
    nodes/COM_FlipNode.cc
    nodes/COM_FlipNode.h
    nodes/COM_RotateNode.cc
    nodes/COM_RotateNode.h
    nodes/COM_ScaleNode.cc
    nodes/COM_ScaleNode.h
    nodes/COM_TranslateNode.cc
    nodes/COM_TranslateNode.h

    nodes/COM_DisplaceNode.cc
    nodes/COM_DisplaceNode.h
    nodes/COM_MapUVNode.cc
    nodes/COM_MapUVNode.h

    nodes/COM_ChannelMatteNode.cc
    nodes/COM_ChannelMatteNode.h
    nodes/COM_ChromaMatteNode.cc
    nodes/COM_ChromaMatteNode.h
    nodes/COM_ColorMatteNode.cc
    nodes/COM_ColorMatteNode.h
    nodes/COM_DifferenceMatteNode.cc
    nodes/COM_DifferenceMatteNode.h
    nodes/COM_DistanceMatteNode.cc
    nodes/COM_DistanceMatteNode.h
    nodes/COM_LensDistortionNode.cc
    nodes/COM_LensDistortionNode.h
    nodes/COM_LuminanceMatteNode.cc
    nodes/COM_LuminanceMatteNode.h

    nodes/COM_GlareNode.cc
    nodes/COM_GlareNode.h

    nodes/COM_SunBeamsNode.cc
    nodes/COM_SunBeamsNode.h
    operations/COM_SunBeamsOperation.cc
    operations/COM_SunBeamsOperation.h

    nodes/COM_CryptomatteNode.cc
    nodes/COM_CryptomatteNode.h
    operations/COM_CryptomatteOperation.cc
    operations/COM_CryptomatteOperation.h

    nodes/COM_CornerPinNode.cc
    nodes/COM_CornerPinNode.h
    nodes/COM_PlaneTrackDeformNode.cc
    nodes/COM_PlaneTrackDeformNode.h

    nodes/COM_CropNode.cc
    nodes/COM_CropNode.h
    operations/COM_CropOperation.cc
    operations/COM_CropOperation.h

    nodes/COM_DefocusNode.cc
    nodes/COM_DefocusNode.h
    nodes/COM_MovieDistortionNode.cc
    nodes/COM_MovieDistortionNode.h
    nodes/COM_Stabilize2dNode.cc
    nodes/COM_Stabilize2dNode.h
    nodes/COM_TransformNode.cc
    nodes/COM_TransformNode.h

    # color nodes
    nodes/COM_AlphaOverNode.cc
    nodes/COM_AlphaOverNode.h
    nodes/COM_BrightnessNode.cc
    nodes/COM_BrightnessNode.h
    nodes/COM_ColorBalanceNode.cc
    nodes/COM_ColorBalanceNode.h
    nodes/COM_ColorCorrectionNode.cc
    nodes/COM_ColorCorrectionNode.h
    nodes/COM_ColorCurveNode.cc
    nodes/COM_ColorCurveNode.h
    nodes/COM_ColorExposureNode.cc
    nodes/COM_ColorExposureNode.h
    nodes/COM_ColorRampNode.cc
    nodes/COM_ColorRampNode.h
    nodes/COM_ColorToBWNode.cc
    nodes/COM_ColorToBWNode.h
    nodes/COM_ConvertAlphaNode.cc
    nodes/COM_ConvertAlphaNode.h
    nodes/COM_ConvertColorSpaceNode.cc
    nodes/COM_ConvertColorSpaceNode.h
    nodes/COM_GammaNode.cc
    nodes/COM_GammaNode.h
    nodes/COM_HueSaturationValueCorrectNode.cc
    nodes/COM_HueSaturationValueCorrectNode.h
    nodes/COM_HueSaturationValueNode.cc
    nodes/COM_HueSaturationValueNode.h
    nodes/COM_InvertNode.cc
    nodes/COM_InvertNode.h
    nodes/COM_MixNode.cc
    nodes/COM_MixNode.h
    nodes/COM_SetAlphaNode.cc
    nodes/COM_SetAlphaNode.h
    nodes/COM_TonemapNode.cc
    nodes/COM_TonemapNode.h
    nodes/COM_VectorCurveNode.cc
    nodes/COM_VectorCurveNode.h
    nodes/COM_ZCombineNode.cc
    nodes/COM_ZCombineNode.h
    operations/COM_TonemapOperation.cc
    operations/COM_TonemapOperation.h

    # converter nodes
    nodes/COM_CombineColorNode.cc
    nodes/COM_CombineColorNode.h
    nodes/COM_CombineColorNodeLegacy.cc
    nodes/COM_CombineColorNodeLegacy.h
    nodes/COM_CombineXYZNode.cc
    nodes/COM_CombineXYZNode.h
    nodes/COM_IDMaskNode.cc
    nodes/COM_IDMaskNode.h
    nodes/COM_SeparateColorNode.cc
    nodes/COM_SeparateColorNode.h
    nodes/COM_SeparateColorNodeLegacy.cc
    nodes/COM_SeparateColorNodeLegacy.h
    nodes/COM_SeparateXYZNode.cc
    nodes/COM_SeparateXYZNode.h

    nodes/COM_MapRangeNode.cc
    nodes/COM_MapRangeNode.h
    nodes/COM_MapValueNode.cc
    nodes/COM_MapValueNode.h
    nodes/COM_MathNode.cc
    nodes/COM_MathNode.h
    nodes/COM_NormalNode.cc
    nodes/COM_NormalNode.h
    nodes/COM_NormalizeNode.cc
    nodes/COM_NormalizeNode.h

    operations/COM_NormalizeOperation.cc
    operations/COM_NormalizeOperation.h

    nodes/COM_PixelateNode.cc
    nodes/COM_PixelateNode.h
    operations/COM_PixelateOperation.cc
    operations/COM_PixelateOperation.h

    # Filter nodes
    nodes/COM_BilateralBlurNode.cc
    nodes/COM_BilateralBlurNode.h
    operations/COM_BilateralBlurOperation.cc
    operations/COM_BilateralBlurOperation.h
    nodes/COM_VectorBlurNode.cc
    nodes/COM_VectorBlurNode.h
    operations/COM_VectorBlurOperation.cc
    operations/COM_VectorBlurOperation.h
    nodes/COM_AntiAliasingNode.cc
    nodes/COM_AntiAliasingNode.h
    nodes/COM_BlurNode.cc
    nodes/COM_BlurNode.h
    nodes/COM_BokehBlurNode.cc
    nodes/COM_BokehBlurNode.h
    nodes/COM_DenoiseNode.cc
    nodes/COM_DenoiseNode.h
    nodes/COM_DespeckleNode.cc
    nodes/COM_DespeckleNode.h
    nodes/COM_DilateErodeNode.cc
    nodes/COM_DilateErodeNode.h
    nodes/COM_DirectionalBlurNode.cc
    nodes/COM_DirectionalBlurNode.h
    nodes/COM_FilterNode.cc
    nodes/COM_FilterNode.h
    nodes/COM_InpaintNode.cc
    nodes/COM_InpaintNode.h
    nodes/COM_KuwaharaNode.cc
    nodes/COM_KuwaharaNode.h
    nodes/COM_PosterizeNode.cc
    nodes/COM_PosterizeNode.h

    operations/COM_BlurBaseOperation.cc
    operations/COM_BlurBaseOperation.h
    operations/COM_BokehBlurOperation.cc
    operations/COM_BokehBlurOperation.h
    operations/COM_DirectionalBlurOperation.cc
    operations/COM_DirectionalBlurOperation.h
    operations/COM_FastGaussianBlurOperation.cc
    operations/COM_FastGaussianBlurOperation.h
    operations/COM_GammaCorrectOperation.cc
    operations/COM_GammaCorrectOperation.h
    operations/COM_GaussianAlphaBlurBaseOperation.cc
    operations/COM_GaussianAlphaBlurBaseOperation.h
    operations/COM_GaussianAlphaXBlurOperation.cc
    operations/COM_GaussianAlphaXBlurOperation.h
    operations/COM_GaussianAlphaYBlurOperation.cc
    operations/COM_GaussianAlphaYBlurOperation.h
    operations/COM_GaussianBlurBaseOperation.cc
    operations/COM_GaussianBlurBaseOperation.h
    operations/COM_GaussianBokehBlurOperation.cc
    operations/COM_GaussianBokehBlurOperation.h
    operations/COM_GaussianXBlurOperation.cc
    operations/COM_GaussianXBlurOperation.h
    operations/COM_GaussianYBlurOperation.cc
    operations/COM_GaussianYBlurOperation.h
    operations/COM_KuwaharaAnisotropicOperation.cc
    operations/COM_KuwaharaAnisotropicOperation.h
    operations/COM_KuwaharaAnisotropicStructureTensorOperation.cc
    operations/COM_KuwaharaAnisotropicStructureTensorOperation.h
    operations/COM_KuwaharaClassicOperation.cc
    operations/COM_KuwaharaClassicOperation.h
    operations/COM_MovieClipAttributeOperation.cc
    operations/COM_MovieClipAttributeOperation.h
    operations/COM_MovieDistortionOperation.cc
    operations/COM_MovieDistortionOperation.h
    operations/COM_PosterizeOperation.cc
    operations/COM_PosterizeOperation.h
    operations/COM_SMAAOperation.cc
    operations/COM_SMAAOperation.h
    operations/COM_SummedAreaTableOperation.cc
    operations/COM_SummedAreaTableOperation.h
    operations/COM_VariableSizeBokehBlurOperation.cc
    operations/COM_VariableSizeBokehBlurOperation.h

    # Matte nodes
    nodes/COM_BoxMaskNode.cc
    nodes/COM_BoxMaskNode.h
    nodes/COM_ColorSpillNode.cc
    nodes/COM_ColorSpillNode.h
    nodes/COM_DoubleEdgeMaskNode.cc
    nodes/COM_DoubleEdgeMaskNode.h
    nodes/COM_EllipseMaskNode.cc
    nodes/COM_EllipseMaskNode.h

    operations/COM_DoubleEdgeMaskOperation.cc
    operations/COM_DoubleEdgeMaskOperation.h


    nodes/COM_KeyingScreenNode.cc
    nodes/COM_KeyingScreenNode.h
    operations/COM_KeyingScreenOperation.cc
    operations/COM_KeyingScreenOperation.h

    nodes/COM_TrackPositionNode.cc
    nodes/COM_TrackPositionNode.h
    operations/COM_TrackPositionOperation.cc
    operations/COM_TrackPositionOperation.h

    nodes/COM_KeyingNode.cc
    nodes/COM_KeyingNode.h
    operations/COM_KeyingBlurOperation.cc
    operations/COM_KeyingBlurOperation.h
    operations/COM_KeyingClipOperation.cc
    operations/COM_KeyingClipOperation.h
    operations/COM_KeyingDespillOperation.cc
    operations/COM_KeyingDespillOperation.h
    operations/COM_KeyingOperation.cc
    operations/COM_KeyingOperation.h

    operations/COM_ColorSpillOperation.cc
    operations/COM_ColorSpillOperation.h
    operations/COM_RenderLayersProg.cc
    operations/COM_RenderLayersProg.h

    operations/COM_BokehImageOperation.cc
    operations/COM_BokehImageOperation.h
    operations/COM_ImageOperation.cc
    operations/COM_ImageOperation.h
    operations/COM_MultilayerImageOperation.cc
    operations/COM_MultilayerImageOperation.h
    operations/COM_TextureOperation.cc
    operations/COM_TextureOperation.h


    operations/COM_SocketProxyOperation.cc
    operations/COM_SocketProxyOperation.h

    operations/COM_CompositorOperation.cc
    operations/COM_CompositorOperation.h
    operations/COM_ConvertDepthToRadiusOperation.cc
    operations/COM_ConvertDepthToRadiusOperation.h
    operations/COM_FileOutputOperation.cc
    operations/COM_FileOutputOperation.h
    operations/COM_PreviewOperation.cc
    operations/COM_PreviewOperation.h
    operations/COM_SplitOperation.cc
    operations/COM_SplitOperation.h
    operations/COM_ViewerOperation.cc
    operations/COM_ViewerOperation.h
    operations/COM_ZCombineOperation.cc
    operations/COM_ZCombineOperation.h

    operations/COM_ChangeHSVOperation.cc
    operations/COM_ChangeHSVOperation.h
    operations/COM_ChannelMatteOperation.cc
    operations/COM_ChannelMatteOperation.h
    operations/COM_ChromaMatteOperation.cc
    operations/COM_ChromaMatteOperation.h
    operations/COM_ColorCurveOperation.cc
    operations/COM_ColorCurveOperation.h
    operations/COM_ColorExposureOperation.cc
    operations/COM_ColorExposureOperation.h
    operations/COM_ColorMatteOperation.cc
    operations/COM_ColorMatteOperation.h
    operations/COM_ColorRampOperation.cc
    operations/COM_ColorRampOperation.h
    operations/COM_CurveBaseOperation.cc
    operations/COM_CurveBaseOperation.h
    operations/COM_DifferenceMatteOperation.cc
    operations/COM_DifferenceMatteOperation.h
    operations/COM_DistanceRGBMatteOperation.cc
    operations/COM_DistanceRGBMatteOperation.h
    operations/COM_DistanceYCCMatteOperation.cc
    operations/COM_DistanceYCCMatteOperation.h
    operations/COM_HueSaturationValueCorrectOperation.cc
    operations/COM_HueSaturationValueCorrectOperation.h
    operations/COM_LuminanceMatteOperation.cc
    operations/COM_LuminanceMatteOperation.h
    operations/COM_VectorCurveOperation.cc
    operations/COM_VectorCurveOperation.h

    operations/COM_BrightnessOperation.cc
    operations/COM_BrightnessOperation.h
    operations/COM_ColorCorrectionOperation.cc
    operations/COM_ColorCorrectionOperation.h
    operations/COM_ConstantOperation.cc
    operations/COM_ConstantOperation.h
    operations/COM_GammaOperation.cc
    operations/COM_GammaOperation.h
    operations/COM_MixOperation.cc
    operations/COM_MixOperation.h
    operations/COM_ReadBufferOperation.cc
    operations/COM_ReadBufferOperation.h
    operations/COM_SetColorOperation.cc
    operations/COM_SetColorOperation.h
    operations/COM_SetValueOperation.cc
    operations/COM_SetValueOperation.h
    operations/COM_SetVectorOperation.cc
    operations/COM_SetVectorOperation.h
    operations/COM_WriteBufferOperation.cc
    operations/COM_WriteBufferOperation.h

    operations/COM_MathBaseOperation.cc
    operations/COM_MathBaseOperation.h

    operations/COM_AlphaOverKeyOperation.cc
    operations/COM_AlphaOverKeyOperation.h
    operations/COM_AlphaOverMixedOperation.cc
    operations/COM_AlphaOverMixedOperation.h
    operations/COM_AlphaOverPremultiplyOperation.cc
    operations/COM_AlphaOverPremultiplyOperation.h

    operations/COM_ColorBalanceASCCDLOperation.cc
    operations/COM_ColorBalanceASCCDLOperation.h
    operations/COM_ColorBalanceLGGOperation.cc
    operations/COM_ColorBalanceLGGOperation.h
    operations/COM_InvertOperation.cc
    operations/COM_InvertOperation.h
    operations/COM_MapRangeOperation.cc
    operations/COM_MapRangeOperation.h
    operations/COM_MapValueOperation.cc
    operations/COM_MapValueOperation.h
    operations/COM_SetAlphaMultiplyOperation.cc
    operations/COM_SetAlphaMultiplyOperation.h
    operations/COM_SetAlphaReplaceOperation.cc
    operations/COM_SetAlphaReplaceOperation.h

    # Distort operation
    operations/COM_DisplaceOperation.cc
    operations/COM_DisplaceOperation.h
    operations/COM_DisplaceSimpleOperation.cc
    operations/COM_DisplaceSimpleOperation.h
    operations/COM_FlipOperation.cc
    operations/COM_FlipOperation.h
    operations/COM_MapUVOperation.cc
    operations/COM_MapUVOperation.h
    operations/COM_PlaneCornerPinOperation.cc
    operations/COM_PlaneCornerPinOperation.h
    operations/COM_PlaneDistortCommonOperation.cc
    operations/COM_PlaneDistortCommonOperation.h
    operations/COM_PlaneTrackOperation.cc
    operations/COM_PlaneTrackOperation.h
    operations/COM_ProjectorLensDistortionOperation.cc
    operations/COM_ProjectorLensDistortionOperation.h
    operations/COM_RotateOperation.cc
    operations/COM_RotateOperation.h
    operations/COM_ScaleOperation.cc
    operations/COM_ScaleOperation.h
    operations/COM_ScreenLensDistortionOperation.cc
    operations/COM_ScreenLensDistortionOperation.h
    operations/COM_TransformOperation.cc
    operations/COM_TransformOperation.h
    operations/COM_TranslateOperation.cc
    operations/COM_TranslateOperation.h
    operations/COM_WrapOperation.cc
    operations/COM_WrapOperation.h

    # Filter operations
    operations/COM_ConvolutionEdgeFilterOperation.cc
    operations/COM_ConvolutionEdgeFilterOperation.h
    operations/COM_ConvolutionFilterOperation.cc
    operations/COM_ConvolutionFilterOperation.h
    operations/COM_DenoiseOperation.cc
    operations/COM_DenoiseOperation.h
    operations/COM_DespeckleOperation.cc
    operations/COM_DespeckleOperation.h
    operations/COM_DilateErodeOperation.cc
    operations/COM_DilateErodeOperation.h
    operations/COM_GlareBaseOperation.cc
    operations/COM_GlareBaseOperation.h
    operations/COM_GlareFogGlowOperation.cc
    operations/COM_GlareFogGlowOperation.h
    operations/COM_GlareGhostOperation.cc
    operations/COM_GlareGhostOperation.h
    operations/COM_GlareSimpleStarOperation.cc
    operations/COM_GlareSimpleStarOperation.h
    operations/COM_GlareStreaksOperation.cc
    operations/COM_GlareStreaksOperation.h
    operations/COM_GlareThresholdOperation.cc
    operations/COM_GlareThresholdOperation.h
    operations/COM_InpaintOperation.cc
    operations/COM_InpaintOperation.h
    operations/COM_SetSamplerOperation.cc
    operations/COM_SetSamplerOperation.h


    # Convert operations
    operations/COM_ConvertOperation.cc
    operations/COM_ConvertOperation.h
    operations/COM_IDMaskOperation.cc
    operations/COM_IDMaskOperation.h

    operations/COM_ConvertColorSpaceOperation.cc
    operations/COM_ConvertColorSpaceOperation.h
    operations/COM_DotproductOperation.cc
    operations/COM_DotproductOperation.h

    # Matte operation
    operations/COM_BoxMaskOperation.cc
    operations/COM_BoxMaskOperation.h
    operations/COM_EllipseMaskOperation.cc
    operations/COM_EllipseMaskOperation.h

    operations/COM_ConvertColorProfileOperation.cc
    operations/COM_ConvertColorProfileOperation.h
    operations/COM_MovieClipOperation.cc
    operations/COM_MovieClipOperation.h

    operations/COM_AntiAliasOperation.cc
    operations/COM_AntiAliasOperation.h

    operations/COM_MaskOperation.cc
    operations/COM_MaskOperation.h
  )

  set(LIB
    bf_blenkernel
    PRIVATE bf::blenlib
    PRIVATE bf::depsgraph
    PRIVATE bf::dna
    PRIVATE bf::intern::clog
    PRIVATE bf::intern::guardedalloc
    bf_realtime_compositor
    extern_clew
    PRIVATE bf::intern::atomic
  )

  list(APPEND INC
    ${CMAKE_CURRENT_BINARY_DIR}/operations
  )

  data_to_c(
    ${CMAKE_CURRENT_SOURCE_DIR}/operations/COM_OpenCLKernels.cl
    ${CMAKE_CURRENT_BINARY_DIR}/operations/COM_OpenCLKernels.cl.h
    SRC
    STRIP_LEADING_C_COMMENTS
  )

  add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS)

  set(GENSRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/operations)
  set(GENSRC ${GENSRC_DIR}/COM_SMAAAreaTexture.h)
  add_custom_command(
    OUTPUT ${GENSRC}
    COMMAND ${CMAKE_COMMAND} -E make_directory ${GENSRC_DIR}
    COMMAND "$<TARGET_FILE:smaa_areatex>" ${GENSRC}
    DEPENDS smaa_areatex
  )
  list(APPEND SRC
    ${GENSRC}
  )
  unset(GENSRC)
  unset(GENSRC_DIR)

  if(WITH_OPENIMAGEDENOISE)
    add_definitions(-DWITH_OPENIMAGEDENOISE)
    add_definitions(-DOIDN_STATIC_LIB)
    list(APPEND INC_SYS
      ${OPENIMAGEDENOISE_INCLUDE_DIRS}
      ${TBB_INCLUDE_DIRS}
    )
    list(APPEND LIB
      ${OPENIMAGEDENOISE_LIBRARIES}
      ${TBB_LIBRARIES}
    )
  endif()

  blender_add_lib(bf_compositor "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")

  blender_set_target_unity_build(bf_compositor 10)

  if(COMMAND target_precompile_headers)
    target_precompile_headers(bf_compositor PRIVATE COM_precomp.h)
  endif()

  if(CXX_WARN_NO_SUGGEST_OVERRIDE)
    target_compile_options(bf_compositor PRIVATE "-Wsuggest-override")
  endif()

  if(WITH_GTESTS)
    set(TEST_SRC
      tests/COM_BufferArea_test.cc
      tests/COM_BufferRange_test.cc
      tests/COM_BuffersIterator_test.cc
      tests/COM_ComputeSummedAreaTableOperation_test.cc
      tests/COM_NodeOperation_test.cc
    )
    set(TEST_INC
    )
    set(TEST_LIB
      bf_compositor
    )
    blender_add_test_suite_lib(compositor "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
  endif()

  # RNA_prototypes.h
  add_dependencies(bf_compositor bf_rna)

# End WITH_COMPOSITOR_CPU.
endif()
